name: Update Playwright Snapshots

on:
  issue_comment:
    types: [created, edited]

permissions:
  contents: write
  pull-requests: write

jobs:
  update-galata-snapshots:
    name: Update Galata References
    if: ${{ github.event.issue.pull_request && (contains(github.event.comment.body, 'please update galata snapshots') || contains(github.event.comment.body, 'please update snapshots')) }}
    timeout-minutes: 80
    runs-on: ubuntu-22.04

    steps:
      - name: React to the triggering comment
        run: |
          gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions --raw-field 'content=+1'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Checkout
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Configure git to use https
        run: git config --global hub.protocol https

      - name: Checkout the branch from the PR that triggered the job
        run: gh pr checkout ${{ github.event.issue.number }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Base Setup
        uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

      - name: Install dependencies
        run: |
          bash ./scripts/ci_install.sh
          # Build dev-mode
          jlpm run build

      - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          server_url: http-get://localhost:8888/lab
          test_folder: galata
          artifact_name: updated-galata-snapshots
          report_name: update-galata-report
          npm_client: jlpm

      - name: Comment back on the PR
        run: |
          gh api repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments --raw-field 'body=Galata snapshots updated.'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  update-documentation-snapshots:
    name: Update Documentation Snapshots
    if: ${{ github.event.issue.pull_request && (contains(github.event.comment.body, 'please update documentation snapshots') || contains(github.event.comment.body, 'please update snapshots')) }}
    timeout-minutes: 80
    runs-on: ubuntu-22.04

    # Python version is frozen through strategy.matrix.python-version
    # Python dependencies are frozen in the installation step
    # Note: IPython is among the frozen package
    strategy:
      matrix:
        # Freeze Python version because it appears in console header
        python-version: ['3.10.6']

    steps:
      - name: React to the triggering comment
        run: |
          gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions --raw-field 'content=+1'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Checkout JupyterLab
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          path: core

      - name: Checkout demo project
        uses: actions/checkout@v4
        with:
          repository: jupyterlab/jupyterlab-demo
          ref: master
          path: demo

      - name: Get demo folder
        run: |
          echo "JUPYTERLAB_GALATA_ROOT_DIR=$PWD" >> $GITHUB_ENV
        working-directory: demo

      - name: Checkout the branch from the PR that triggered the job
        working-directory: core
        run: gh pr checkout ${{ github.event.issue.number }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Base Setup
        uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

      - name: Install dependencies
        working-directory: core
        run: |
          set -ex
          # Install chinese font
          sudo apt-get update
          sudo apt-get install fonts-dejavu fonts-noto

          # Freeze the packages to ensure consistent look and feel
          # IPython is frozen because its version is displayed in
          # the console header
          pip install .[docs-screenshots]
          bash ./scripts/ci_install.sh

          # Build dev-mode
          jlpm run build

      - uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          server_url: http-get://localhost:8888/lab
          test_folder: core/galata
          start_server_script: start:doc
          update_script: test:doc:update
          artifact_name: updated-documentation-snapshots
          report_name: update-documentation-report
          npm_client: jlpm

      - name: Comment back on the PR
        run: |
          gh api repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments --raw-field 'body=Documentation snapshots updated.'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
